Fabric 多机部署
配置
4 个 Peer 节点.
1 个 Orderer 节点.
1 台中间服务器.
准备条件
在本小节内的内容, 是 5 个节点都需要做的.
安装 Git
sudo apt install git
安装 Go
下载
安装
解压:
tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz
配置环境变量, 打开文件 .profile:
export PATH=$PATH:/usr/local/go/bin export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$PATH:$HOME/go/bin
使配置生效:
source ~/.profile
创建 GOPATH 文件夹:
mkdir -p $GOPATH
测试
go
如果能识别 go 命令, 说明安装成功.
安装 Docker
安装
wget -qO- https://get.docker.com/ | sh
修改当前用户的权限
sudo usermod -aG docker $USER
添加阿里云的 Docker Hub 镜像
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://5cr0yvyw.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
问题
若出现: sudo: unable to resolve host xxx 的情况, 是因为机器在解析这个主机名时出现了问题, 但不影响命令的执行. 如果不想看到这个问题, 则修改 /etc/hosts:
# 原有的内容 127.0.0.1 localhost # 修改成: 127.0.0.1 localhost 127.0.0.1 xxx(主机名)
测试
输入命令:
docker
如果可以识别这个命令, 则安装成功.
安装 Docker-Compose
安装 python-pip
sudo apt install python-pip
安装 Docker-Compose
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
测试
docker-compose --version
如果给出了版本号, 则说明安装成功.
下载 Hyperledger Fabric
go get github.com/hyperledger/fabric
下载 Hyperledger Fabric 镜像文件
cd ~/go/src/github.com/hyperledger/fabric/scripts ./bootstrap.sh
将下载好的 fabric-samples 移到想要的目录:
mv fabric-samples ../../
测试
在测试之前, 进入 /etc/resolv.conf, 将 options timeout:2 attempts:3 rotate single-request-reopen 这一行内容注释. 否则测试无法通过.
进入 fabric-samples/first-network:
启动网络:
./byfn generate ./byfn up
如果正常启动, 则表示单机上没有问题.
关闭网络:
./byfn down
另外, 也可以测试 e2e-cli 的例子.
测试镜像文件:
./network_setup.sh up
如果正常启动, 则表示单机上没有问题.
关闭网络:
./network_setup.sh down
多机配置
修改主机名
/etc/hostname: 存放主机名
/etc/hosts: 存放的是域名与 ip 的对应关系.
因此, 这边需要修改的是 /etc/hostname. 打开后将新的主机名替换现有的主机名, 保存后重启即可.
Orderer 节点的主机名改成: orderer.example.com Peer0 节点的主机名改成: peer0.org1.example.com Peer1 节点的主机名改成: peer1.org1.example.com Peer2 节点的主机名改成: peer0.org2.example.com Peer3 节点的主机名改成: peer1.org2.example.com
以 Orderer 节点为例:
编辑 /etc/hostname 文件, 将文件的内容改成如下:
orderer.example.com
编辑 /etc/hosts 文件, 增加 IP 到 域名 的映射:
127.0.0.1 orderer.example.com 172.17.xx.xx peer0.org1.example.com 172.17.xx.xx peer1.org1.example.com 172.17.xx.xx peer0.org2.example.com 172.17.xx.xx peer1.org2.example.com
保存后重启.
使用脚本生成必要文件
在 orderer.example.com 节点上, 进入 first-network 目录.
执行命令:
./byfn.sh generate
该命令生成的文件:
- channel-artifacts 里面包含了与 mychannel 通道相关的文件.
- crypto-config 文件里包含了各个节点的公钥, 私钥和证书的信息.
编辑 docker-compose 文件
docker-compose-orderer.yaml
编辑 docker-compose-orderer.yaml 文件:
version: '2' volumes: orderer.example.com: networks: byfn: services: orderer.example.com: extends: file: base/docker-compose-base.yaml service: orderer.example.com container_name: orderer.example.com networks: - byfn
共识类型使用的是 Solo, 详细的配置信息在 docker-compose-base.yaml 文件里.
docker-compose-peer.yaml
version: '2' volumes: peer0.org1.example.com: networks: byfn: services: peer0.org1.example.com: container_name: peer0.org1.example.com extends: file: base/docker-compose-base.yaml service: peer0.org1.example.com networks: - byfn extra_hosts: - "orderer.example.com:172.17.90.60" - "peer1.org1.example.com:172.17.9.56" - "peer0.org2.example.com:172.17.190.162" - "peer1.org2.example.com:172.17.9.58" cli: container_name: cli image: hyperledger/fabric-tools:$IMAGE_TAG tty: true stdin_open: true environment: - GOPATH=/opt/gopath - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock #- CORE_LOGGING_LEVEL=DEBUG - CORE_LOGGING_LEVEL=INFO - CORE_PEER_ID=cli - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 - CORE_PEER_LOCALMSPID=Org1MSP - CORE_PEER_TLS_ENABLED=true - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer command: /bin/bash volumes: - /var/run/:/host/var/run/ - ./../chaincode/:/opt/gopath/src/github.com/chaincode - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/ - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts depends_on: - peer0.org1.example.com extra_hosts: - "orderer.example.com:172.17.90.60" - "peer0.org1.example.com:172.17.9.57" - "peer1.org1.example.com:172.17.9.56" - "peer0.org2.example.com:172.17.190.162" - "peer1.org2.example.com:172.17.9.58" networks: - byfn
base/docker-compose-base.yaml
将所有端口都映射到 7051 和 7053 (如 8051, 9051 等都改成 7051). 不过, 如果一台主机运行多个节点, 则不能这么改.
分发配置文件
将配置文件分发到每一个主机上:
scp -r first-network root@172.17.9.57:~/go/src/github.com/hyperledger/fabric-samples
启动节点
到每个节点上启动与该节点相应的容器:
docker-compose -f docker-compose-orderer.yaml up -d
最后进入 cli:
docker exec -it cli bash ./scripts/script.sh mychannel
Generated by Emacs 25.x(Org mode 8.x)
Copyright © 2014 - pinvon - Powered by EGO